package com.guxingke.typecho4j;

import javax.servlet.ServletContext;

import com.guxingke.typecho4j.route.Routes;
import com.guxingke.typecho4j.widget.WidgetFactory;
import com.jfinal.core.JFinal;

/**
 * typecho4j的启动类，单例
 * 
 * @author guxingke
 *
 */
public class Typecho4j {
	/**
	 * 运行时配置依赖
	 */
	private Constants constants;

	/**
	 * 运行时路由
	 */
	private Routes routes;

	/**
	 * ServletContext的实例
	 * */
	private ServletContext servletContext;

	private static final Typecho4j ME = new Typecho4j();

	private Typecho4j() {
	}

	public static Typecho4j typecho4j() {
		return ME;
	}

	// typecho 的初始化，在jfinal启动之后进行
	// 任务：初始化配置，初始化widgetFactory,初始化需要放入application作用域的数据
	public boolean init(ServletContext servletContext)
			throws Typecho4jException {
		this.servletContext = servletContext;

		if (servletContext == null) {
			throw new Typecho4jException(100,
					"typecho4j init failed");
		}

		// 配置typecho4j
		Typecho4jConfig config = new Typecho4jConfig();
		Typecho4jConfig.configTypecho4j(config);

		// 初始化typecho4j的配置，主题，模板路径等
		constants = config.getConstants();

		// 初始化路由
		routes = config.getRoutes();

		// 不使用配置文件初始化
		WidgetFactory.buildWidget(constants.getWidgetPackageNames());
		// 组件初始化
		WidgetFactory.initWidget(constants);
		// 配置组件自带路由
		WidgetFactory.configRoute(routes);
		// TODO
		return false;
	}

	public ServletContext getServletContext() {
		return servletContext;
	}

	public Constants getConstants() {
		return constants;
	}

	public Routes getRoutes() {
		return routes;
	}

	/**
	 * jfinal封装了jettyserver，便于本地开发测试
	 * */
	public static void main(String[] args) {
		JFinal.start("src/main/webapp", 20000, "/", 5);
	}
}
